//
// Created by sjjmw on 3/24/2022.
//

//应该使用dfs

#include "iostream"
#include "vector"
#include "list"
#include "algorithm"
#include "string"
#include "unordered_map"
#include "cmath"
#include<iomanip>
#include "string"
#include "map"
#include "list"
#include "queue"
//[将i] [分成j份] 的方案数
//int dp[1001][301]={0};

struct Sol{
    std::vector<char> dp;
    std::vector<int> bz;
//    std::vector<int> dp;
    //互相取余，直到其中一个为0
    int calc_max_gys(int a,int b){
        if(a==0){
            return b;
        }else{
           return calc_max_gys(b%a,a);
        }
    }
    void handle(
            int n1
            ){
//        printf("%d\n",dp[n1][n1]);
        dp.resize(100000);
        bz.resize(n1);
        int max_gys;
        {
            int in;std::cin>>in;
            dp[in]=1;
            bz[0]=in;
            max_gys=in;
        }
        for (int i = 1; i < n1; ++i) {
            int in;std::cin>>in;
            dp[in]=1;
            bz[i]=in;
            max_gys=calc_max_gys(max_gys,in);
        }
        if(max_gys>1){
            printf("INF\n");
            return;
        }
        for(int i=bz[0];i<dp.size();i++){
            if(dp[i]){
                for(auto b:bz){
                    if(i+b<dp.size()){
                        dp[i+b]=1;
                    }
                }
            }
        }
        int cnt=0;
        for(int i=1;i<dp.size();i++){
            if(!dp[i]){
                cnt++;
            }
        }
        printf("%d\n",cnt);
//        dp.resize(n1);
    }
};
int main(){
    int a,b,c;
    while(std::cin>>a){
        Sol().handle(a);

//        Sol().handle(a,b);
    }

    return 0;
}